package conf

import (
	"github.com/BurntSushi/toml"
	"github.com/caarlos0/env/v6"
)

//项目配置用于存放配置对象,做成全局
//通过LoadConfigFromToml LoadConfigFromEnv来加载全局配置
//通过C()来访问全局变量
var (
	c *Config
)

func C() *Config {
	if c == nil {
		panic("load config first")
	}
	return c
}

// 给程序以默认配置
func LoadConfigFromToml(filePath string) error {
	// 用默认值赋值给了全局变量c
	c = NewDefaultConfig()
	// 如果此处有值返回将覆盖上面c的默认值
	_, err := toml.DecodeFile(filePath, c)
	if err != nil {
		return err
	}
	return nil
}

// 使用这个库来进行环境变量映射 github.com/caarlos0/env/v6
func LoadConfigFromEnv() error {
	// 用默认值 赋值给全局变量c
	c = NewDefaultConfig()
	// 如果环境有值就将值放到覆盖上面默认值c并返回
	// 传到c的时候会读取结构体的标签
	return env.Parse(c)
}
